package com.xuecheng.api.contant;

import com.xuecheng.api.contant.model.dto.CourseBaseDTO;
import com.xuecheng.api.contant.model.qo.QueryCourseBaseModel;
import com.xuecheng.api.contant.model.vo.CourseBaseVO;
import com.xuecheng.common.domain.page.PageRequestParams;
import com.xuecheng.common.domain.page.PageVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

import java.util.List;

@Api(value = "课程基本信息api",tags = "课程基础信息api管理")
public interface CourseBaseApi {

    /**
     * 根据课程Id提交课程信息
     * @param courseBaseId 课程id
     */
    @ApiOperation(value = "提交审核")
    @ApiImplicitParam(name = "courseBaseId", value = "课程ID", required = true, dataType = "Long", paramType = "query", example = "1")
    void commitCourseBase(Long courseBaseId);

    /**
     * 分页条件查询课程基本信息数据
     * @param params PageRequestParams 分页封装数据
     * @param model QueryCourseBaseModel 条件查询封装数据
     * @return PageVO 分页结果封装数据
     */
    @ApiOperation("分页条件查询课程基本信息")
    PageVO queryCourseList(PageRequestParams params, QueryCourseBaseModel model);


    /**
     * 添加课程基本信息
     * @param courseBaseVO 前端传过来的VO实体类数据
     * @return 返回DTO数据给前端
     */
    @ApiOperation(value = "保存课程基本信息")
    @ApiImplicitParam(name = "courseBaseVO",
            value = "课程基本视图信息", required = true,
            dataType = "CourseBaseVO", paramType = "body")
    CourseBaseDTO createCourseBase(CourseBaseVO courseBaseVO);

    /**
     * 根据Id获取课程基本信息
     * @param courseBaseId 课程基本信息id
     * @return 返回CourseBaseDTO
     */
    @ApiOperation(value = "根据Id获取课程基本信息")
    @ApiImplicitParam(name = "courseBaseId", value = "课程基本信息ID", required = true, dataType = "Long", paramType = "path", example = "1")
    CourseBaseDTO getCourseBase(Long courseBaseId);

    /**
     * 更新课程基本信息
     * @param courseBaseVO 课程基本信息VO
     * @return 返回CourseBaseDTO
     */
    @ApiOperation("更新课程基本信息")
    @ApiImplicitParam(name = "courseBaseVO", value = "课程基本信息VO", required = true, dataType = "CourseBaseVO", paramType = "body")
    CourseBaseDTO modifyCourseBase(CourseBaseVO courseBaseVO);

    /**
     * 删除课程基本信息
     * @param courseBaseId 课程基本信息id
     */
    @ApiOperation("根据Id删除课程信息")
    @ApiImplicitParam(name = "courseBaseId", value = "课程id值", required = true, paramType = "path")
    void removeCourseBase(Long courseBaseId);

    /**
     * 查询课程基本信息
     * @return List<CourseBase> 所有课程信息的集合
     */
    @ApiOperation("查询全部课程信息")
    List queryAll();
}
